一、this指针
	类的成员变量单独存储在每个类对象中，成员函数存储在代码段中，所有的类对象共享一份成员函数。
	成员函数是如何区别调用它的是哪个类对象的？
	答：借助了this指针，类的每个成员函数都有一个隐藏的参数this指针，它指向类对象

	类的构造函数中也同样有this指针，指向的就是正在的构造的这个对象。
	
	在类中(成员函数、构造、析构)对成员变量，成员函数的访问都是借助了this指针。
	
	this指针是隐藏的，但也可以显式使用：
		1. 参数与成员名重合时，使用this可以区别出成员变量与参数名 
		2. 在成员函数中如果想返回当前对象的指针、引用等，可以使用this指针
		3. 将this指针作来函数的参数，从一个对象传递给另一个其他类对象，可以实现不同对象间的交互。
		
		
		
二、常函数	
	常函数：在函数的参数列表与函数体之间有const修饰的函数，其实这个const就是在修饰this指针。
	
	不能再常函数内修改成员变量的值。普通的成员函数可以调用常函数，而常函数只能调用常函数。
	
	如果在常函数中真的需要修改某个成员变量的数据，那么需要这个成员被 mutable修饰
	普通函数（没有this指针）无法成为常函数
	
	
三、析构函数
	1. 特殊的成员函数
			函数名必须是 
			~类名(void)
			{
				
			}
			没有参数 没有返回值、不能重载
	2. 谁来调用
		析构函数会在销毁对象时自动调用，在对象的整个生命周期内最多被调用一次。
		
			
	3. 析构函数负责什么
		析构函数负责释放在构造函数期间所获取到的所有资源，它的执行过程：
			1. 先执行析构函数本身代码
			2. 调用成员类的析构函数
			3. 调用父类的析构函数
			
	4. 缺省的析构函数
		如果一个类没有实现析构函数，编译器会自动生成一个具有析构函数功能的二进制指令，它负责释放编译器能够看得到的资源(成员变量、类成员、父类成员)，这就是缺省析构。
		如果一个类没有动态资源，也不需要做善后工作，缺省析构就完全够用了，不需要在实现新的析构函数。
		
		注意：缺省析构无法释放动态资源(堆内存)
	
	
	类对象的创建过程与释放过程。
		创建：获取空间，分配内存(对象) ->父类构造->成员构造->自己(析构)的构造
			父类构造：按照继承表从左到右以此构造。
			成员构造：按照声明顺序从上到下依次构造。
			
		释放：自己析构->析构成员->析构父类->释放内存(对象)
			析构成员:按照声明顺序从下到上依次析构
			析构父类:按照继承表从右到左以此析构。
	
四、拷贝结构 dome4.cpp
	拷贝构造又称为复制构造，是一种特殊的构造函数，它是使用一个现有的对象来构造一个新的对象，只有一个引用型的参数(对象本身)。
	类名(类& )
	{
		
		
	}
	拷贝构造的参数应该加const保护，但编译器并没有强制限制。
	
	编译器会自动生成一个拷贝构造函数，负责把旧对象中的所有数据拷贝给新对象。
	
	深拷贝与浅拷贝
		如果类成员中有指针，浅拷贝只拷贝指针变量的值，深拷贝是指向指针变量指向的目标
		
		什么情况下需要实现拷贝构造：
			当类成员中有指针成员，此时默认的拷贝构造就无法完成任务了，需要自己动手实现拷贝构造(深拷贝)。
			
		什么情况下会调用拷贝构造：
			1. 使用旧对象给新对象赋值时
			User user1 =user；
			2. 使用对象当最函数的参数，当调用函数时就会一起调用拷贝构造
				
	
五、赋值构造
	当一类旧对象给另一个类新对象赋值时，就会调用赋值构造
	void operator=(类&)
	{
		
	}

	什么时候会调用： 对象 = 对象;
	编译器会生成一个缺省的赋值构造，它负责把一个对象的内存拷贝给另一个对象。
	
	
	什么情况下会调用赋值构造：
		当需要深拷贝时需要自己动手实现赋值构造，也就是拷贝构造与赋值构造需要同时实现。
		
		编译器会自动生成四个成员函数：构造、析构、赋值、拷贝


六、关于拷贝构造、拷贝构造的建议
	1.  缺省的拷贝构造、赋值构造函数不光会拷贝本类的数据，也会调用成员类对象和父类的拷贝构造和赋值构造，而不是单纯的按字节赋值，因此尽量少用指针成员
	
	2. 在函数参数中尽量使用类指针或引用当来参数(不要直接使用类对象)，减少调用拷贝构造和赋值构造的机会，也可以降低数据传递的开销。
	3. 如果由于特殊原因无法实现完整的拷贝构造和赋值构造，建议将它们私有化，防止误用
	4. 一旦为一个类实现了拷贝构造，那么也一定要实现赋值构造
	
	


七、静态成员dome5.cpp
	类成员一旦被static修饰就会变成静态成员，单独一份存储在bss或data内存段中，所有的类对象共享(静态成员属于类，而不属于某个对象)。
	
	静态成员在类内声明，但必须在类外定义以及初始化，与成员函数一样，需要加  类名::  表示它属于哪个类，单不需要再额外加sataic

	成员函数前也可以被static修饰，这种函数也叫静态成员函数，这种成员函数没有this指针，因此静态函数中不能直接访问类的成员及成员函数，但可以直接访问静态成员变量、静态成员函数。
	
	
	静态成员函数依然受访问控制限定符的影响
	
	因此在代码编译完成后静态成员已经定义完成了，有了自己的存储空间，因此可以不通过类对象而直接调用， 类名::静态成员名。
	
	普通成员函数可以直接访问静态成员变量和静态成员函数。
	
  
	静态成员变量能可以被当做全局变量来使用(访问限定符必须是 public)，静态成员函数可以当做一个类的接口，实现对类的管理


八、单例模式

	单例模式：只能创建出一个类对象(只有一个实际的实例)的叫单例模式

	单例模式的应用场景：
		windows系统的任务管理器
		Unix/linux的日志系统
		网站的访问计数器
		服务端程序的连接池、线程池、数据池。
		
	获取单一对象的方法
		1. 定义成全局(C语言)，但不受控制，防君子不防小人。
		2. 专门写一个类，把类的构造函数设置私有，借助静态成员函数提供一个接口以此来获取唯一的实例。
		
		
	C++如何实现单利模式：
		1. 禁止类的外部创建类对象：构造函数私有化
		2. 类自己维护一个唯一的实例：使用一个静态指针指向
		3. 提供一个获取该实例的方法：静态成员函数获取静态指针


	饿汉模式：singleton1.cpp
		将单例类的唯一实例对象定义为成员变量，当程序开始运行，实例对象就已经创建完成
		优点：加载进行时静态创建单例对象，线程安全。
		缺点：无论使用与否，总要创建，浪费内存。
	
	
	懒汉模式：singleton2.cpp
		用静态成员指针来指向单例类的唯一实例对象，只有真正调用获取实例对象的静态接口时，实例对象才被创建。
		优点：什么时候用什么时候创建，节约内存
		缺点：在第一次调用获取实例对象结构时才真正创建，如果在多线程操作情况下有可能被创建出多个实例对象，存在线程不安全问题。









总结： C语言与C++ 有哪些不同点
		内存管理 new/delete malloc/free 		
		字符串：string函数和string类的区别
		static
		const
		void*

https://blog.csdn.net/czc1997/article/details/81254971



https://blog.csdn.net/czc1997/article/details/81254971









